import Seo from '@/core/components/Seo'; import LogoSpinner from '@/core/components/elements/Spinner/LogoSpinner'; import { getIdFromSlug } from '@/core/utils/slug'; import productApi from '@/lib/product/api/productApi'; import PageNotFound from '@/pages/404'; import dynamic from 'next/dynamic'; import { useRouter } from 'next/router'; import cookie from 'cookie'; import axios from 'axios'; import { useProductContext } from '@/contexts/ProductContext'; import { useEffect } from 'react'; import { updateItemCart } from '@/core/utils/cart'; const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout') ); const Product = dynamic(() => import('@/lib/product/components/Product/Product') ); export async function getServerSideProps(context) { const { slug } = context.query; const cookies = context.req.headers.cookie; const cookieObj = cookies ? cookie.parse(cookies) : {}; const auth = cookieObj.auth ? JSON.parse(cookieObj.auth) : {}; const tier = auth.pricelist ? auth.pricelist : false; let response = await axios( `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/product-detail?id=` + getIdFromSlug(slug) + '&auth=' + tier ); let product = response.data; // let productSolr = await productApi({ id: getIdFromSlug(slug), headers: { Token: authToken } }) // let productSolr = null if (product?.length == 1) { product = product[0]; } else { product = null; } return { props: { product }, }; } export default function ProductDetail({ product }) { const router = useRouter(); const { setProduct } = useProductContext(); useEffect(() => { if (product) { setProduct(product); } }, [product, setProduct]); useEffect(() => { const { action, variantId, qty } = router.query; const addToCart = async () => { const data = { productId: variantId, quantity: qty, selected: true, programLineId: null, source: action, }; await updateItemCart(data); const redirectURL = action === 'buy' ? '/shop/checkout?source=buy' : '/shop/cart'; router.push(redirectURL); }; if (action && variantId && qty) { addToCart(); } }, [router]); if (!product) return ; return ( {!product && (
)} {product && }
); }